texasMapsLink="https://github.com/ThayraSosa/geodfprepro/raw/main/maps/texasMaps_3081(2).gpkg"
import geopandas as gpd
from fiona import listlayers
#layers in maps
listlayers(texasMapsLink)
['airports', 'texas', 'capitals', 'rivers']
#EJERCICIO 1
texas_seaports=gpd.read_file(os.path.join("maps","hotosm_usa_texas_sea_ports_points_shp","hotosm_usa_texas_sea_ports_points.shp"))
texas_roads=gpd.read_file(os.path.join("maps","hotosm_usa_texas_roads_lines_shp","hotosm_usa_texas_roads_lines.shp"))
texas_airports=gpd.read_file(texasMapsLink,layer='airports')
texas_rivers=gpd.read_file(texasMapsLink,layer='rivers')
#Importamos los mapas
texas_seaports.crs, texas_roads.crs
#Los dos tienen un crs:4326, lo cambiaremos al recomendado que es 3081
(<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich,
<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich)
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich,
<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich)
texas_seaports_3081=texas_seaports.to_crs(3081)
texas_roads_3081=texas_roads.to_crs(3081)
largeAirports=texas_airports[texas_airports.kind=='large_airport']
largeAirports.reset_index(drop=True, inplace=True)
#Solo utilizaremos aquello aeropuertos grandes
base=largeAirports.plot(color='red',marker="^")
texas_seaports_3081.plot(ax=base,alpha=0.5,markersize=5)
#Podemos observar los puertos maritimos y los aeropuertos grandes
<Axes: >
texas_seaports_3081.head()
#algunos de los puertos dentro de Texas
largeAirports.head()
#Hallamos la distancias entre cada seaport y airport
texas_seaports_3081.set_index('name').geometry.apply\
(lambda g: largeAirports.set_index('name').geometry.distance(g)/1000).\
sort_index(axis=0).sort_index(axis=1)
#Los nombres de los seaports definen las filas mientras que las columnas son los aeropuertos
#Guardamos la matrix
distanceMatrixKM_sea_air=texas_seaports_3081.set_index('name').geometry.apply\
(lambda g: largeAirports.set_index('name').geometry.distance(g)/1000).\
sort_index(axis=0).sort_index(axis=1)
distanceMatrixKM_sea_air.mean(axis=1).sort_values(ascending=True)
#Hallamos la media de las distancias
#Hallamos los minimos de distancia para puertos y para aeropuertos
#Minima distancia que hay entre los puerto a un aeropuerto
distanceMatrixKM_sea_air.idxmin(axis="columns")
distanceMatrixKM_sea_air.idxmin(axis="rows")
#Minima distancia que hay entre aeropuertos a puertos
aransas_pass_ferry=distanceMatrixKM_sea_air[distanceMatrixKM_sea_air.index=="Aransas Pass Ferry Landing"]
aransas_pass_ferry_min=aransas_pass_ferry.idxmin(axis="columns")
aransas_pass_ferry_min
#Notamos que no hay valores numericos
import pandas as pd
SomeStats=pd.DataFrame()
SomeStats['min']=distanceMatrixKM_sea_air.min(axis=1)
SomeStats.head()
aransas_pass_ferry_min=SomeStats[SomeStats.index=="Aransas Pass Ferry Landing"]
base=texas_seaports_3081[texas_seaports_3081.name=="Aransas Pass Ferry Landing"].plot(color='red',marker="^")
min_2_airport=largeAirports[largeAirports.name=="Austin Bergstrom International Airport"]
min_2_airport.plot(color='blue',marker=".")
aransas_pass_ferry_min.plot(color='blue',marker=".")
<Axes: xlabel='name'>
#EJERCICIO 2
texas_rivers
#No quedamos con Rio Grande
texas_rivers[texas_rivers.NAME.str.contains('Canadian')]
#Veamos la distancia entre los rios y los aeropuertos
distanceMatrixKM_riv_air=texas_rivers.set_index('NAME').geometry.apply\
(lambda g: largeAirports.set_index('name').geometry.distance(g)/1000).\
sort_index(axis=0).sort_index(axis=1)
distanceMatrixKM_riv_air
distanceMatrixKM_riv_air.loc['Canadian'].sort_values() #La distancia de los aeropuertos a el rio Canadian
texas_rivers[~texas_rivers.SYSTEM.isna()]
#Observamos que el rio Canadian pertenece a un sistema
systems=texas_rivers.dissolve(by='SYSTEM')
systems
systems['NAME']=systems.index
systems.reset_index(drop=True,inplace=True)
systems
distanceMatrixKM_sys_air=systems.set_index('NAME').geometry.apply\
(lambda g: largeAirports.set_index('name').geometry.distance(g)/1000).\
sort_index(axis=0).sort_index(axis=1)
distanceMatrixKM_sys_air
Brazos=texas_rivers[texas_rivers.NAME=="Brazos"]
Brazos
texas_rivers_brazos=texas_rivers[texas_rivers.NAME=="Brazos"]
distanceMatrixKM_riv_air_2=texas_rivers_brazos.set_index('NAME').geometry.apply\
(lambda g: largeAirports.set_index('name').geometry.distance(g)/1000).\
sort_index(axis=0).sort_index(axis=1)
distanceMatrixKM_riv_air_2
mins=distanceMatrixKM_riv_air_2.idxmin(axis="columns")
mins
#En este caso usaremos un linea y no un sistema
base=Brazos.explore()
largeAirports[largeAirports.name.isin(mins)].explore(m=base,color='red',marker_kwds=dict(radius=10))
largeAirports[~largeAirports.name.isin(mins)].explore(m=base,color='blue',marker_kwds=dict(radius=5))
#EJERCICIO 3
systems.convex_hull.plot()
#Convertimos los sistemas de rÃos a hulls
<Axes: >
systems_hulls=systems.convex_hull.to_frame()
systems_hulls['system']=['Missisipi', 'Rio Grande']
systems_hulls.rename(columns={0:'geometry'},inplace=True)
systems_hulls=systems_hulls.set_geometry('geometry')
systems_hulls.crs="EPSG:3081"
systems_hulls
distanceMatrixKM_sysHull_air=systems_hulls.set_index('system').geometry.apply\
(lambda g: largeAirports.set_index('name').geometry.distance(g)/1000).\
sort_index(axis=0).sort_index(axis=1)
distanceMatrixKM_sysHull_air
systems_hulls_2=systems_hulls[systems_hulls.system=="Missisipi"]
distanceMatrixKM_sysHull_air_2=systems_hulls_2.set_index('system').geometry.apply\
(lambda g: largeAirports.set_index('name').geometry.distance(g)/1000).\
sort_index(axis=0).sort_index(axis=1)
distanceMatrixKM_sysHull_air_2
#Escogemos el hull de Missisipi
mins=distanceMatrixKM_sysHull_air_2.idxmin(axis="columns")
mins
base=systems_hulls_2.explore()
largeAirports[largeAirports.name.isin(mins)].explore(m=base,color='red',marker_kwds=dict(radius=10))
largeAirports[~largeAirports.name.isin(mins)].explore(m=base,color='blue',marker_kwds=dict(radius=5))
#EJERCICIO 4
#Crearemos un buffer alrededor de Rio Grande
minMts=distanceMatrixKM_riv_air.loc['Rio Grande'].min()*1000
minMts
texas_rivers[texas_rivers.NAME=='Rio Grande'].buffer(distance = minMts)
bufferAroundRioGrande=texas_rivers[texas_rivers.NAME=='Rio Grande'].buffer(distance = minMts)
bufferAsBase=bufferAroundRioGrande.explore(color='red')
texas_rivers[texas_rivers.NAME=='Rio Grande'].explore(m=bufferAsBase,color='blue',style_kwds={'weight':0.3})
minMts_2=distanceMatrixKM_riv_air.loc['Canadian'].min()*10
minMts_2
texas_rivers[texas_rivers.NAME=='Canadian'].buffer(distance = minMts_2)
bufferAroundCanadian=texas_rivers[texas_rivers.NAME=='Canadian'].buffer(distance = minMts_2)
bufferAsBase_2=bufferAroundCanadian.explore(color='greenyellow')
texas_rivers[texas_rivers.NAME=='Canadian'].explore(m=bufferAsBase_2,color='blue',style_kwds={'weight':0.5})
minMts_3=distanceMatrixKM_riv_air.loc['Pecos'].min()*50
minMts_3
texas_rivers[texas_rivers.NAME=='Pecos'].buffer(distance = minMts_3)
bufferAroundPecos=texas_rivers[texas_rivers.NAME=='Pecos'].buffer(distance = minMts_3)
bufferAsBase_3=bufferAroundPecos.explore(color='#D2A2FF')
texas_rivers[texas_rivers.NAME=='Pecos'].explore(m=bufferAsBase_3,color='blue',style_kwds={'weight':0.5})
small_airports=texas_airports[texas_airports.kind=='small_airport']
texas_rivers[texas_rivers.NAME=='Rio Grande'].explore(m=bufferAsBase,color='blue',style_kwds={'weight':0.5})
small_airports.explore(m=bufferAsBase,color='black')
#Son los aeropuertos pequeños dentro de Texas, pero nosotros solo queremos los que estan adentro del buffer
riversWithinBuffer=small_airports.clip(mask=bufferAroundRioGrande)
riversWithinBuffer
bufferAsBase=bufferAroundRioGrande.explore(color='greenyellow')
texas_rivers[texas_rivers.NAME=='Rio Grande'].explore(m=bufferAsBase,color='blue',style_kwds={'weight':0.5})
riversWithinBuffer.explore(m=bufferAsBase,color='red')
riversWithinBuffer_2=small_airports.clip(mask=bufferAroundPecos)
bufferAsBase_2=bufferAroundPecos.explore(color='#D2A2FF')
texas_rivers[texas_rivers.NAME=='Pecos'].explore(m=bufferAsBase_2,color='blue',style_kwds={'weight':0.5})
riversWithinBuffer_2.explore(m=bufferAsBase_2,color='red')
riversWithinBuffer_3=small_airports.clip(mask=bufferAroundCanadian)
bufferAsBase_3=bufferAroundCanadian.explore(color='#FFA459')
texas_rivers[texas_rivers.NAME=='Canadian'].explore(m=bufferAsBase_3,color='blue',style_kwds={'weight':0.5})
riversWithinBuffer_3.explore(m=bufferAsBase_3,color='red')